One codebase → every store, registry, CDN, and channel. Ads on every network. Cloud infra on demand. AI agents tighten the loop.
Cloud infra (sh1pt deploy / sh1pt scale)
Merch / swag (sh1pt promote merch)
Investor outreach (sh1pt promote investors)
Crowdfunding (sh1pt promote crowdfund)
Organic social (sh1pt promote social)
Niche / user-supplied social (stubs pending API docs)
Outreach (sh1pt promote outreach)
Payments (sh1pt config payments)
Webhook targets (sh1pt config webhooks)
Chat bridges (sh1pt promote bridge) — relay messages between networks
Document generation (sh1pt promote docs)
CAPTCHA solvers (last-resort, browser-mode fallback only)
AI agents (sh1pt iterate agents)
sh1pt is Expo for everywhere: web, mobile (iOS/Android), desktop (macOS/Windows/Linux/SteamOS), wearables, TV, XR, browser extensions, CLIs, SDKs, package managers, CDNs, container registries, app-hosting platforms — all driven by one manifest, one CLI, and one cloud.
AI agent builders generating apps at volume. Give an agent one API + one manifest, get a live listing on every store and registry without it learning 30 publishing pipelines.
$499/year for the managed cloud — build runners (Linux + macOS + Windows), credentials vault, store submission monitoring, webhook alerts, policy linter, rate-limit protection. Self-host core is OSS.
Four verbs. One per word of the tagline. Everything else nests so the global namespace stays tight.
sh1pt build # compile artifacts
sh1pt promote # publish (ship), run ads, print swag (merch)
sh1pt scale # provision infra (deploy), DNS round-robin, rollouts, cost
sh1pt iterate # observe metrics → agent proposes (agents) → ship → measureNested subcommand tree:
sh1pt build [--target X] [--channel C] [--cloud]
sh1pt promote (default: launch ads)
setup / status / stop / creatives ad-platform ops
ship [--target X] [--channel C] [--dry-run] publish to stores/registries
init / setup / status / rollback / lint / logs
target add|remove|list|available
merch swag — Printful / Printify
setup / create / list / publish / giveaway / orders / payout
investors angel/seed/VC outreach — CapitalReach.ai + AngelList + OpenVC
setup / pitch / search / status / schedule
crowdfund equity + reward crowdfunding
setup / launch / status
social organic cross-post to 9 social networks
setup / post / metrics
outreach cold email, podcast pitches, launch sites
podcasts / email / launch / status
sh1pt scale
up / down / auto / dns / rollout / cost / status
deploy raw cloud infra (RunPod, DO, Vultr, Hetzner, Atlantic, Railway, Cloudflare)
setup / quote / provision / list / destroy / status
sh1pt iterate
run / watch / goals / test / experiments
agents drive Claude / Codex / Qwen
list / setup / talk / run / generate
sh1pt login (auxiliary)
sh1pt secret set|get|list|rm (auxiliary — credentials vault)
sh1pt promote ship [--target X] [--channel beta|stable] [--dry-run] [--skip-lint]
sh1pt ship init # scaffold sh1pt.config.ts
sh1pt ship setup [--store id] [--poll] # connect store credentials
sh1pt ship status [--target id] [--json] # live/pending/in-review per target
sh1pt ship rollback [--target id]
sh1pt ship lint [--strict] [--json] # also runs automatically pre-ship
sh1pt ship logs [--target id] [-f]
sh1pt ship target add|remove|list|availablesh1pt ship setup is the killer command: run once, connect every store in parallel, walk away. Human-only steps (Apple D-U-N-S, Google Play identity verification, Microsoft Partner Center review) become a tracked checklist with deep links, polled automatically.
sh1pt promote [--platform X] [--budget N] [--duration 7d] [--objective install] [--dry-run]
sh1pt promote setup [--platform id] [--poll] # org + ad account + funding + OAuth
sh1pt promote status [--platform id] [--json] # aggregated spend / impressions / installs
sh1pt promote stop [--platform id]
sh1pt promote creativesPublishing alone is table stakes. promote closes the loop — one command runs install / traffic / awareness campaigns on Reddit, Meta, TikTok, Google, YouTube, X, Apple Search, LinkedIn, and Microsoft Ads at once.
Provision raw compute you own (distinct from promote ship, which pushes finished apps to hosted platforms).
sh1pt scale deploy setup # connect RunPod / DO / Vultr / Hetzner / Atlantic / Railway / Cloudflare
sh1pt scale deploy quote --kind gpu --gpu A100 --gpu-count 2 # cheapest-first across all connected providers
sh1pt scale deploy provision --provider cloud-runpod \
--kind gpu --gpu H100 --gpu-count 1 \
--max-hourly-price 4.50 # guardrail — abort if quote exceeds ceiling
sh1pt scale deploy list
sh1pt scale deploy destroy <instanceId>GPU hourly rates are $3–8+. --max-hourly-price is strongly recommended for any GPU provision — a forgotten A100 overnight is a tuition-level mistake.
Horizontal scale + round-robin DNS + staged rollouts + spend tracking. Under the hood it composes deploy (to buy/retire instances) with a DNS provider (to point traffic).
sh1pt scale up --instances 5 --max-hourly-price 8 # buy 5 more, abort if >$8/hr total
sh1pt scale down --instances 2
sh1pt scale auto --min 2 --max 20 --target-cpu 70 # sh1pt cloud polls + scales for you
sh1pt scale dns --provider dns-porkbun --domain api.example.com
sh1pt scale dns --provider dns-cloudflare --domain api.example.com --proxied
sh1pt scale rollout --version v0.7.0 --strategy canary --percent 5
sh1pt scale cost # hourly/monthly + rightsizing hints
sh1pt scale statusThe optimization loop. Pull live metrics (installs, conversion, CPI, churn, errors), hand them to an agent with your declared goals, let the agent propose a diff, ship it, measure, repeat.
sh1pt iterate goals set conversion=8% cpi=2.00 churn=5% # optimization targets
sh1pt iterate run # single cycle
sh1pt iterate watch --interval 3600 # daemon — cycle every hour
sh1pt iterate test "pricing anchor at $99 lifts conversion" --traffic 50
sh1pt iterate experimentsSwag — shirts, hoodies, stickers, pens, notebooks, mugs, tote bags, socks, phone cases. Sell it on Shopify/Etsy/Gumroad for revenue, or ship it free to conference attendees and community members for no-cost brand amplification.
sh1pt promote merch setup --provider merch-printful
sh1pt promote merch create --design ./logo.svg --products tshirt,hoodie,sticker,pen --price 25
sh1pt promote merch publish --storefront shopify # sell mode
sh1pt promote merch giveaway --sku <id...> --addresses ./list.csv # free mode — bulk ship
sh1pt promote merch orders
sh1pt promote merch payoutProviders: Printful (widest catalog, auto-fulfillment) and Printify (multi-supplier, often lower base cost). The --budget-cap flag on merch giveaway prevents a typo in the CSV from rattling through $5k of free hoodies.
Relay messages between chat networks. Slack ↔ Discord ↔ IRC ↔ Signal ↔ Matrix ↔ Mastodon ↔ Nostr ↔ Telegram. Matterbridge-style but adapter-per-network and vault-first.
sh1pt promote bridge setup --network bridge-discord bridge-matrix bridge-irc
sh1pt promote bridge connect discord:123456789012 matrix:!room:example.org irc:libera.chat/#myproj
sh1pt promote bridge start # foreground daemon
sh1pt promote bridge status # active routes + message countsEach relay shows "<username> [<network>]: <text>" on the destination so lurkers see who's actually talking. Filter flags (--filter no-bots no-pings no-links) drop patterns you don't want cross-posted.
Generate pitch decks, one-pagers, press kits, whitepapers. Keep source markdown in git, regenerate on change.
# open-source, local, version-controlled (markdown → .pptx / .pdf / .html)
sh1pt promote docs generate --kind pitch-deck --format pptx --markdown ./deck.md --provider docs-marp
# Google Slides — copies a hosted template + substitutes {{vars}}
sh1pt promote docs generate --kind pitch-deck --format pdf --provider docs-gslides --template <slides-doc-id>
# upload the finished PDF to LuminPDF for a sharable viewer link
sh1pt promote docs generate --kind pitch-deck --format pdf --provider docs-marp --upload-to-lumin
# long-form (whitepapers, proposals) via pandoc
sh1pt promote docs generate --kind whitepaper --format docx --markdown ./whitepaper.md --provider docs-pandocFundraising is just another growth channel. sh1pt wraps investor-outreach tools (starting with CapitalReach.ai) so you can run a seed round the same way you run ads — filter by stage/sector/check-size, send personalized intros with your pitch deck, track the funnel from reply to term sheet.
sh1pt promote investors setup
sh1pt promote investors search --stage seed --sectors ai,devtools --check-max 500 --out ./target-list.csv
sh1pt promote investors pitch \
--stage seed --sectors ai,devtools \
--check-min 50 --check-max 500 \
--deck ./deck.pdf --one-pager ./one-pager.pdf \
--leads-only
sh1pt promote investors status # sent / replies / meetings / term sheets
sh1pt promote investors schedule # synced calendar meetings⚠ API vs browser mode. Most investor-outreach platforms don't expose public write APIs — they'd cannibalize their own moat. sh1pt's adapters run in two modes:
api— when the vendor offers programmatic access (rare; usually enterprise-tier).browser— Playwright drives the web UI. A CAPTCHA challenge gets routed to a configured solver (captcha-2captchaorcaptcha-solver). Rate-limited by default (10 sends/hr) to stay under anti-bot thresholds. Use responsibly — respect ToS.
Equity (Wefunder, Republic, StartEngine) and reward-based (Kickstarter, Indiegogo). Legal filings (Form C for Reg CF, KYC, bank linking) must be completed manually — sh1pt automates the launch + updates + status polling around them.
sh1pt promote crowdfund setup --provider promo-wefunder
sh1pt promote crowdfund launch --target 100000 --duration 30
sh1pt promote crowdfund statusCross-post organically to X, LinkedIn, Instagram, Threads, TikTok, YouTube (Shorts + long-form), Reddit, Mastodon, and Bluesky. One Post definition adapts per platform — truncation, hashtag placement, media requirements, visibility rules are all enforced by the adapter.
sh1pt promote social setup --platform social-x social-linkedin social-bluesky
sh1pt promote social post \
--body "Launched sh1pt — one CLI ships your app to every store. Early bird \$244/yr." \
--hashtags indiehackers,launch,devtools,ai \
--media ./demo.mp4 --link https://sh1pt.dev
sh1pt promote social metricsPlatform quirks the adapters handle: X 280-char limit with hashtags counted, Instagram requires media, TikTok requires a video, YouTube detects Shorts from aspect + duration, Reddit doesn't do hashtags, each Mastodon instance needs its own token.
Every "salesy thing we can automate online" — podcast guest-pitches, cold email sequences, launch coordination.
sh1pt promote outreach podcasts --niche ai,startups,devtools --min-listeners 5000 --deck ./kit.pdf
sh1pt promote outreach email --recipients ./targets.csv \
--subject "Thought you might find this useful" \
--body ./templates/pitch.md --from "You <you@yourdomain.com>" --rate 20
sh1pt promote outreach launch --site producthunt --schedule 2026-05-01T07:01:00Z --gallery ./shots/*.png
sh1pt promote outreach statusCompliance reminder. Cold email is legitimate under CAN-SPAM / CASL / GDPR only with proper basis (legitimate interest), physical address in the footer, one-click unsubscribe, and immediate opt-out honoring. sh1pt enforces per-hour rate limits (default 20) and auto-suppresses bounces + unsubscribes, but the legal basis is yours to establish.
Drive AI coding CLIs — sh1pt wraps Claude Code, Codex, and Qwen so you can generate/iterate on a project from the same manifest.
sh1pt iterate agents list # which CLIs are installed locally
sh1pt iterate agents setup --agent claude codex qwen # install + auth each one
sh1pt iterate agents talk [agent] --recipe <id> # interactive session with a preloaded recipe prompt
sh1pt iterate agents run <agent> "add stripe checkout to /waitlist/checkout"
sh1pt iterate agents generate --recipe waitlist-crypto-investor --boilerplate next-supabase --out ./my-appsh1pt login # authenticate with sh1pt cloud (device-code flow)
sh1pt secret set|get|list|rm # manage credentials vault (used by every verb)
sh1pt config show # print the resolved manifest
sh1pt config stack set # prompts — node / bun / python / rust / custom
sh1pt config payments add # payment providers: CoinPay default, Stripe/PayPal opt-in
sh1pt config vcs set # prompts — GitHub / GitLab / Gitea / local-only
sh1pt config webhooks add discord # paste-URL integrations (Slack / Teams / Telegram / Discord / generic)Secrets model: prompt, don't .env. sh1pt prompts for API keys and writes them to the credentials vault — no .env in your project is required for sh1pt-managed secrets. ctx.secret('KEY') in every adapter reads from the vault. You only need .env for build-time-inlined values like NEXT_PUBLIC_SUPABASE_URL where the framework requires it.
Supported today (interactive pick via sh1pt config stack set):
- Node — TypeScript + React (Next.js, Expo, Tauri, Chrome ext) — default
- Bun — TypeScript on Bun runtime (Hono backend, compile-to-single-binary)
- Python — FastAPI + Supabase
- Rust — Axum + Supabase (tiny release binaries, great for Fly machines)
- Custom — bring your own, sh1pt skips scaffolding
Planned: C++ (Drogon / Crow) and .NET (ASP.NET Core).
CoinPay is the default provider — crypto early-access prepay is the killer flow for the waitlist-crypto-investor recipe. Fiat providers are opt-in stubs today:
// sh1pt.config.ts
payments: {
defaultProvider: 'payment-coinpay',
providers: {
coinpay: { use: 'payment-coinpay', enabled: true, config: { acceptedCoins: ['BTC','ETH','USDC','SOL'] } },
stripe: { use: 'payment-stripe', enabled: false, config: {} },
paypal: { use: 'payment-paypal', enabled: false, config: {} },
},
platformFeeBps: 1500, // marketplaces: 15% platform fee via Stripe Connect
}CLI shortcuts (sh1pt config payments add|remove|default|list|fee) edit this block without hand-touching the file.
Git + a remote (GitHub / GitLab / Gitea) are plumbing every verb touches. promote ship --channel stable tags a release and uploads assets. iterate run opens a PR from the branch the agent just wrote to. promote outreach launch can auto-link the public repo.
sh1pt config vcs set # prompts — GitHub / GitLab / Gitea / local-only
sh1pt config vcs auth --provider vcs-github # writes GITHUB_TOKEN (or GITLAB_TOKEN / GITEA_TOKEN) to vault
sh1pt config vcs release v0.7.0 --body ./RELEASE.md --asset ./dist/*.tar.gz
sh1pt config vcs pr --head iterate/fix-abc --base main --title "fix checkout flow"
sh1pt config vcs hook add --events push,pull_request,releaseLocal git stays the source of truth. The VCS provider handles remote-side operations (releases, PRs, webhooks) that can't be done with git alone.
Every adapter implements one of ~12 interfaces (Target, AdPlatform, CloudProvider, DnsProvider, MerchProvider, PaymentProvider, SocialPlatform, VcsProvider, WebhookTarget, AgentCLI, CaptchaSolver, Recipe). sh1pt ships generic contract-test runners in @sh1pt/core/testing — adapters consume them with one line:
// packages/payments/coinpay/src/index.test.ts
import { contractTestPayment } from '@sh1pt/core/testing';
import payment from './index.js';
contractTestPayment(payment, {
sampleConfig: { merchantId: 'm_test' },
requiredSecrets: ['COINPAY_API_KEY'],
});Each runner verifies:
- id / label / required fields present and correctly namespaced (e.g.
payment-*,cloud-*,webhook-*) connect()throws a vault-hint error when required secrets are missing — enforces the prompt-to-vault ruledry-runnever hits the network — guardrail against accidental real calls in test suites- Return shapes match the declared types
- Interface-specific guardrails — e.g. GPU cloud adapters accept
--max-hourly-price, social adapters with media requirements reject posts without media, payments parse webhooks without throwing
Run everything:
pnpm test # vitest run
pnpm test:watch # vitest --watchFull contract for representative adapters (pkg-npm, cloud-runpod, payment-coinpay, bridge-discord, docs-marp, etc.) and smoke tests for everything else (~110 adapters). Smoke is deliberately permissive — verifies the adapter exports id + label, the id follows the package-family convention, and kind / supports are declared where the interface requires them. No network calls, no sample configs. Graduates to a full contract test as real implementations land.
// smoke test — used on ~110 adapters across the repo
import { smokeTest } from '@sh1pt/core/testing';
import adapter from './index.js';
smokeTest(adapter, { idPrefix: 'social' });Setup flows follow a least-friction-first ordering — prefer whichever the vendor supports:
- Webhook URL — paste once, done. No token lifecycle. (Discord, Slack incoming, Teams connector, generic HTTP.)
- API key / static token — one copy-paste. Long-lived credentials, no expiry dance.
- OAuth — browser redirect + callback. Automated but multi-step.
- Manual URL + written instructions — last resort. Print a deep link to the vendor's developer page with "go here, do this, paste the result."
Never "set an env var from the shell." When an adapter's connect() throws "KEY not in vault" the CLI launches the right flow automatically.
Sometimes all you need is a webhook URL. Create one in the destination (Discord channel → Webhooks, Slack app → Incoming Webhooks, Teams channel → Connectors, Telegram bot from BotFather), paste it once:
sh1pt config webhooks add discord # prompts for the URL, stores in vault
sh1pt config webhooks add slack --events ship.published,scale.alarm.tripped
sh1pt config webhooks add telegram # bot token + chat_id
sh1pt config webhooks add teams
sh1pt config webhooks add generic # any HTTP URL; body is HMAC-signed
sh1pt config webhooks test discord --event ship.published # fire a stub eventSh1pt fires every configured target on the events you subscribe it to — ship.published, promote.campaign.started, promote.merch.order.placed, scale.alarm.tripped, payments.checkout.completed, iterate.cycle.completed, etc. Or use * to get everything.
Customer-direction subscriptions (sh1pt → your server):
sh1pt config webhooks sub add https://yoursite.com/api/sh1pt --events ship.published,payments.checkout.completed
# prints the signing secret ONCE — store it; sh1pt only keeps a hash.
# Verify the X-Sh1pt-Signature header with HMAC-SHA256(body, secret).A recipe is a composed app type. Declare one in sh1pt.config.ts and sh1pt scaffolds a product shape — including pricing tiers, payment flows, waitlist capture, and an investor pitch page — that ships the marketing side across every channel immediately. Then an agent fills in the actual product on demand the waitlist proves.
The flagship recipe — waitlist-crypto-investor:
- Landing page + tiered pricing (default: $244/yr early-bird vs $499/yr standard)
- Prepaid waitlist (email + handle), early-bird tier sends signups straight to checkout
- Crypto payment via CoinPay / Solana Pay / Coinbase Commerce + Stripe for cards
- Investor page with pitch deck viewer, team, traction, contact
- Referral program — $50 credit per invite, tiered bonuses (3 → +$150, 10 → +$600, 25 → +$2000)
- Supabase auth + postgres + RLS (Row-Level Security) for every table
Every boilerplate (next-supabase, expo-supabase, tauri-supabase, chrome-ext-react, bun-hono-supabase) declares this recipe by default. Override any field in recipeConfig, or swap recipes entirely.
// sh1pt.config.ts
export default defineConfig({
name: 'my-app',
version: '0.1.0',
recipe: 'waitlist-crypto-investor',
recipeConfig: {
pricing: [
{ id: 'early', label: 'Founder tier', amount: 99, currency: 'USD', cadence: 'yearly' },
{ id: 'standard', label: 'Pro', amount: 299, currency: 'USD', cadence: 'yearly' },
],
referral: { rewardAmount: 25 },
},
targets: { /* ... */ },
});Combined flow:
sh1pt agents generate --recipe waitlist-crypto-investor --boilerplate next-supabase
sh1pt ship --channel beta # deploy the waitlist + investor page everywhere sh1pt supports
sh1pt promote --budget 100/day # run ads across Reddit / Meta / TikTok / Google / YouTube
# … collect prepaid signups. build what pays.The sh1pt CLI runs on Node (22+), Bun (1.1+), and Deno (2.0+). Install whichever you prefer:
npm install -g @sh1pt/cli # or
bun install -g @sh1pt/cli # or
deno install -g -A -n sh1pt jsr:@sh1pt/cliFuture: bun build --compile will produce a standalone binary for brew install sh1pt, winget install sh1pt, etc. — no JS runtime required on the user's machine.
Declare creatives, budget, and targeting in sh1pt.config.ts:
promo: {
platforms: {
reddit: { use: 'promo-reddit', config: { businessId: '...', accountId: '...' } },
meta: { use: 'promo-meta', config: { adAccountId: '...', pageId: '...' } },
tiktok: { use: 'promo-tiktok', config: { advertiserId: '...' } },
google: { use: 'promo-google', config: { customerId: '...', campaignType: 'app-install' } },
youtube: { use: 'promo-youtube', config: { customerId: '...', formats: ['bumper-6s', 'shorts'] } },
},
defaultBudget: { amount: 50, currency: 'USD', cadence: 'daily' },
creatives: [{ headline: '...', description: '...', image: './assets/ad1.jpg' }],
targeting: { geo: ['US','CA','GB'], languages: ['en'] },
}One campaign definition fans out to every platform sh1pt understands how to talk to — same model as targets.
sh1pt/
├── sh1pt.config.ts This repo ships ONE thing — the CLI — to every package manager.
│ This config dogfoods sh1pt to publish itself.
├── packages/ Workspace members — what this repo actually produces.
│ ├── core/ Target plugin interface, manifest schema, registry
│ ├── cli/ `sh1pt` CLI (the single user-facing artifact)
│ ├── sdk/ Programmatic JS/TS SDK
│ ├── api/ SaaS backend (Hono) — projects, releases, builds, credentials, agents
│ ├── policy/ Store-policy linter (runs before every ship)
│ ├── promo/ Ad-platform adapters (reddit, meta, tiktok, google, youtube, x, apple-search, linkedin, microsoft)
│ ├── cloud/ Cloud-infra adapters (runpod, digitalocean, vultr, hetzner, atlantic, railway, cloudflare)
│ ├── dns/ DNS adapters (porkbun, cloudflare)
│ ├── agents/ AI CLI adapters (claude, codex, qwen)
│ ├── recipes/ App-type recipes (waitlist-crypto-investor, …)
│ ├── merch/ Print-on-demand adapters (printful, printify)
│ ├── captcha/ Captcha-solver adapters (2captcha, captcha-solver) — browser-mode fallback only
│ ├── social/ Organic-social adapters (x, linkedin, instagram, threads, tiktok, youtube, reddit, mastodon, bluesky)
│ ├── outreach/ Outreach adapters (listennotes, resend, producthunt)
│ ├── payments/ Payment providers (coinpay default; stripe, paypal, worldremit)
│ ├── vcs/ VCS providers (github, gitlab, gitea)
│ ├── webhooks/ Paste-URL webhook targets (discord, slack, telegram, teams, generic)
│ ├── bridges/ Chat-network bridges (discord, slack, irc, signal, matrix, mastodon, nostr, telegram)
│ ├── docs/ Document generators (marp, gslides, pandoc, lumin)
│ ├── web/ Dashboard (stub)
│ └── targets/ One adapter per distribution surface
│ ├── pkg-npm/
│ ├── pkg-homebrew/
│ ├── mobile-ios/
│ ├── desktop-mac/
│ ├── desktop-win/
│ ├── desktop-linux/
│ ├── desktop-steamos/ Steam Deck Desktop Mode (Flatpak, bypasses Steam)
│ ├── browser-chrome/
│ ├── web-static/
│ ├── tv-tvos/ Apple TV
│ ├── tv-firetv/ Fire TV / Firestick
│ ├── tv-roku/ Roku (⚠ BrightScript, not JS/React)
│ ├── tv-androidtv/ Android TV
│ ├── tv-webos/ LG webOS
│ ├── xr-webxr/ WebXR (universal)
│ ├── xr-meta-quest/ Meta Horizon Store (Quest)
│ ├── xr-sidequest/ SideQuest (Quest sideload)
│ ├── xr-visionos/ Apple Vision Pro
│ ├── xr-pico/ Pico Store (ByteDance)
│ ├── xr-steamvr/ SteamVR (PCVR / OpenXR)
│ ├── console-steam/ Steam (incl. Deck Gaming Mode via Steamworks)
│ ├── pkg-fdroid/ F-Droid (FOSS Android repo)
│ ├── pkg-cdn/ jsDelivr / unpkg / esm.sh / cdnjs / Skypack / JSPM
│ ├── pkg-jsr/ JSR (TS-native registry)
│ ├── pkg-deno/ deno.land/x (git-tag based)
│ ├── pkg-ghpackages/ GitHub Packages (npm)
│ ├── pkg-docker/ OCI images — Docker Hub / GHCR / Quay / ECR / GCR / ACR
│ ├── deploy-denodeploy/ Deno Deploy
│ ├── deploy-workers/ Cloudflare Workers
│ ├── deploy-fly/ Fly.io
│ ├── deploy-railway/ Railway
│ ├── chat-telegram/ Telegram Bot API
│ ├── chat-slack/ Slack App Directory
│ ├── chat-signal/ Signal (signal-cli / signald, ⚠ no official bot platform)
│ ├── chat-discord/ Discord App Directory
│ └── chat-whatsapp/ WhatsApp Business Cloud API
├── sites/ sh1pt's own live properties (dogfood).
│ └── sh1pt.com/ Marketing + waitlist + investor page
├── boilerplates/ Standalone starter projects (NOT workspace members).
│ ├── hello-world/ Bare manifest — no framework
│ ├── next-supabase/ Next.js 15 + React 19 + Supabase (web/PWA)
│ ├── expo-supabase/ Expo + Supabase (iOS + Android + F-Droid)
│ ├── tauri-supabase/ Tauri 2 + React + Supabase (desktop)
│ ├── chrome-ext-react/ React + Vite + Supabase (Chrome MV3)
│ ├── bun-hono-supabase/ Bun + Hono + Supabase (backend API, compiled binary)
│ ├── fastapi-supabase/ FastAPI + Supabase (Python backend)
│ ├── axum-supabase/ Axum + Supabase (Rust backend, tiny release binaries)
│ └── next-plugin-store/ Plugin marketplace — publishers list, users buy, Stripe Connect payouts
│ (all boilerplates ship a LICENSE, logo.svg, favicon.svg, and default to
│ the waitlist-crypto-investor recipe)
└── TARGETS.md Full matrix of ~40 planned surfaces, stores, and registries
Just the CLI. sh1pt.config.ts at the root uses sh1pt itself to fan the CLI out to every package manager — npm install -g @sh1pt/cli, brew install sh1pt, winget install sh1pt, scoop install sh1pt, etc. Lib packages (@sh1pt/core, @sh1pt/sdk, @sh1pt/policy, target adapters) ride along on npm so sh1pt init and target plugins can pull them at runtime.
- Manifest (
sh1pt.config.ts): declares a project and which targets it ships to. - Target: a plugin that knows how to
build,ship,status, androllbackfor one surface. - Release: a versioned build destined for one or more targets on a given channel (
stable/beta/canary). - Channel → store track mapping:
betaroutes to TestFlight on iOS, Play internal track on Android, Chrome Web Store testing, etc.stablepromotes to production. - Policy linter (
@sh1pt/policy): runs before every ship. Catches duplicate titles, banned keywords, bad bundle ids, and spammy submission rate before the store rejects you (or flags the account). - Cloud: projects, secrets vault, build queue with per-OS runners, release history, live status dashboards, inbound webhooks from store APIs, outbound webhooks to your systems.
For programmatic use from LLM agents, one call publishes everywhere:
POST /v1/agents/publish
{
"name": "...", "version": "...",
"targets": [{ "use": "mobile-ios", "config": {...} }, ...],
"secrets": { "NPM_TOKEN": "..." },
"channel": "beta"
}Also POST /v1/agents/bulk-publish for fan-out across many projects, and GET /v1/agents/quota for the $499 plan limits.
See TARGETS.md for the full surface matrix.